package com.xjc.study.operatingexamination.od.computertest;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * @author xujiucheng
 * @Description: 矩阵最大值（华为）
 * 定一个仅包含0和1的n*n二维矩阵请计算二维矩阵的最大值
 * 计算规则如下
 * 1、每行元素按下标顺序组成一个二进制数(下标越大约排在低位)，
 * 二进制数的值就是该行的值，矩阵各行之和为矩阵的值
 * 2、允许通过向左或向右整体循环移动每个元素来改变元素在行中的位置
 * 比如
 * [1,0,1,1,1] 向右整体循环移动两位 [1,1,1,0,1]
 * 二进制数为11101 值为29
 * [1,0,1,1,1] 向左整体循环移动两位 [1,1,1,1,0]
 * 二进制数为11110 值为30
 *
 * 输入描述
 * 1.数据的第一行为正整数，记录了N的大小
 * 0<N<=20
 * 2.输入的第2到n+1行为二维矩阵信息
 * 行内元素边角逗号分割
 *
 * 输出描述
 * 矩阵的最大值
 *
 * 示例1
 *
 * 输入
 * 5
 * 1,0,0,0,1
 * 0,0,0,1,1
 * 0,1,0,1,0
 * 1,0,0,1,1
 * 1,0,1,0,1
 *
 * 输出
 * 122
 * 说明第一行向右整体循环移动一位，得到最大值 11000 24
 * 因此最大122
 * @date 2023-10-08 12:58
 */
public class MaxMatrix {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String count = sc.nextLine();
        int sum = 0;
        List<String> strList = new ArrayList<>();
        for (int i = 0; i < Integer.parseInt(count); i++) {
            String s = sc.nextLine();
            strList.add(s);
        }
        for (String str : strList) {
            String[] strs = str.split(",");
            int max = getMax(strs);
            sum += max;
        }
        System.out.println(sum);

    }

    private static int getMax(String[] strs) {
        int max = 0;
        // 向右整体移动5次
        for (int j = 0; j < strs.length; j++) {
            StringBuilder sb = new StringBuilder();
            for (int i1 = 0; i1 < strs.length; i1++) {
                if (i1 == 0) {
                    sb.append(strs[strs.length - 1]);
                } else {
                    sb.append(strs[i1 - 1]);
                }
            }
            strs = sb.toString().split("");
            int val = Integer.parseInt(sb.toString(), 2);
            if (max < val) {
                max = val;
            }
        }
        return max;
    }
}
